// 导入Vue核心库和Vue Router
import Vue from 'vue'
import Router from 'vue-router'

// 安装Vue Router插件（全局注册$router和$route）
Vue.use(Router)

/* 布局组件（侧边栏+顶部导航的基础布局） */
import Layout from '@/layout'

/**
 * 路由配置项说明
 * hidden: true               // 设为true时，该路由不会在侧边栏显示（如登录页、错误页）
 * alwaysShow: true           // 设为true时，无论子路由数量多少，侧边栏始终显示根路由
 * redirect: noRedirect       // 设为noRedirect时，面包屑导航不可点击
 * name:'router-name'         // 路由名称（用于keep-alive缓存）
 * query: '参数对象'           // 访问路由时默认传递的参数
 * roles: ['角色列表']         // 允许访问该路由的角色权限
 * permissions: ['权限标识']   // 允许访问该路由的菜单权限
 * meta: {                    // 元信息
    noCache: true,            // 设为true时，不被<keep-alive>缓存
    title: '显示名称',         // 侧边栏和面包屑显示的标题
    icon: 'svg图标名',         // 侧边栏显示的图标（对应src/assets/icons/svg）
    breadcrumb: false,        // 设为false时，不显示在面包屑
    activeMenu: '高亮路径'     // 设为指定路径时，侧边栏对应菜单项高亮
  }
 */

// 公共路由（所有用户均可访问的基础路由）
export const constantRoutes = [
  { // 重定向路由（用于页面内跳转）
    path: '/redirect',
    component: Layout,
    hidden: true,
    children: [
      { path: '/redirect/:path(.*)', component: () => import('@/views/redirect') }
    ]
  },
  { // 登录页面路由
    path: '/login',
    component: () => import('@/views/login'),
    hidden: true
  },
  { // 注册页面路由
    path: '/register',
    component: () => import('@/views/register'),
    hidden: true
  },
  { // 404错误页面路由
    path: '/404',
    component: () => import('@/views/error/404'),
    hidden: true
  },
  { // 401无权限页面路由
    path: '/401',
    component: () => import('@/views/error/401'),
    hidden: true
  },
  { // 首页路由（默认跳转）
    path: '',
    component: Layout,
    redirect: 'index',
    children: [
      { 
        path: 'index',
        component: () => import('@/views/index'),
        name: 'Index',
        meta: { title: '首页', icon: 'dashboard', affix: true } // affix: 固定在标签栏
      }
    ]
  },
  { // 用户个人中心路由（隐藏在侧边栏）
    path: '/user',
    component: Layout,
    hidden: true,
    redirect: 'noredirect',
    children: [
      { 
        path: 'profile',
        component: () => import('@/views/system/user/profile/index'),
        name: 'Profile',
        meta: { title: '个人中心', icon: 'user' }
      }
    ]
  }
]

// 动态路由（根据用户权限动态加载）
export const dynamicRoutes = [
  { // 用户角色分配路由（需system:user:edit权限）
    path: '/system/user-auth',
    component: Layout,
    hidden: true,
    permissions: ['system:user:edit'],
    children: [
      { 
        path: 'role/:userId(\d+)',
        component: () => import('@/views/system/user/authRole'),
        name: 'AuthRole',
        meta: { title: '分配角色', activeMenu: '/system/user' } // 高亮系统用户菜单
      }
    ]
  },
  { // 角色用户分配路由（需system:role:edit权限）
    path: '/system/role-auth',
    component: Layout,
    hidden: true,
    permissions: ['system:role:edit'],
    children: [
      { 
        path: 'user/:roleId(\d+)',
        component: () => import('@/views/system/role/authUser'),
        name: 'AuthUser',
        meta: { title: '分配用户', activeMenu: '/system/role' }
      }
    ]
  },
  { // 字典数据管理路由（需system:dict:list权限）
    path: '/system/dict-data',
    component: Layout,
    hidden: true,
    permissions: ['system:dict:list'],
    children: [
      { 
        path: 'index/:dictId(\d+)',
        component: () => import('@/views/system/dict/data'),
        name: 'Data',
        meta: { title: '字典数据', activeMenu: '/system/dict' }
      }
    ]
  },
  { // 调度日志查看路由（需monitor:job:list权限）
    path: '/monitor/job-log',
    component: Layout,
    hidden: true,
    permissions: ['monitor:job:list'],
    children: [
      { 
        path: 'index/:jobId(\d+)',
        component: () => import('@/views/monitor/job/log'),
        name: 'JobLog',
        meta: { title: '调度日志', activeMenu: '/monitor/job' }
      }
    ]
  },
  { // 生成配置修改路由（需tool:gen:edit权限）
    path: '/tool/gen-edit',
    component: Layout,
    hidden: true,
    permissions: ['tool:gen:edit'],
    children: [
      { 
        path: 'index/:tableId(\d+)',
        component: () => import('@/views/tool/gen/editTable'),
        name: 'GenEdit',
        meta: { title: '修改生成配置', activeMenu: '/tool/gen' }
      }
    ]
  }
]

// 解决连续点击同一路由报错的问题（重写push和replace方法）
let routerPush = Router.prototype.push
let routerReplace = Router.prototype.replace
// 重写push方法，捕获重复跳转的错误
Router.prototype.push = function push(location) {
  return routerPush.call(this, location).catch(err => err)
}
// 重写replace方法，捕获重复跳转的错误
Router.prototype.replace = function push(location) {
  return routerReplace.call(this, location).catch(err => err)
}

// 创建并导出路由实例
export default new Router({
  mode: 'history', // 使用history模式（去掉URL中的#）
  scrollBehavior: () => ({ y: 0 }), // 路由跳转后滚动到顶部
  routes: constantRoutes // 初始加载公共路由（动态路由后续通过addRoutes添加）
})
